package org.example.testdemo.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource;
import org.example.testdemo.mapper.ProjectMapper;
import org.example.testdemo.pojo.PageReq;
import org.example.testdemo.pojo.Project;
import org.example.testdemo.pojo.combination.ProjectList;
import org.example.testdemo.pojo.combination.ProjectPid;
import org.example.testdemo.pojo.combination.ProjectUpdate;
import org.example.testdemo.service.ProjectService;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProjectServiceImpl implements ProjectService {

    @Resource
    private ProjectMapper projectMapper;

    @Override
    public List<ProjectPid> getProjectPname(String pName) {
        if(pName.isEmpty()){
           pName = null;
        }
        return projectMapper.getProjectPname(pName);
    }

    /**
     * 通过pId查询项目信息
     * @param pId 项目id
     * @return 返回项目信息
     */
    @Override
    public Project querySubordinateProjects(String pId) {
        QueryWrapper<Project> wrapper = new QueryWrapper<>();
        wrapper.eq("p_id",pId);
        return projectMapper.selectOne(wrapper);
    }

    /**
     * 通过pId查询下级项目
     * @param pId 项目id
     * @return 返回项目id集合
     */
    @Override
    public List<ProjectPid> subordinateProjects(String pId) {
        return projectMapper.subordinateProjects(pId);
    }

    /**
     * 修改项目是否是明细项目
     *
     * @param pId 项目id
     */
    @Override
    public void updateDetails(String pId) {
        projectMapper.updateDetails(pId);
    }

    /**
     * 新增项目信息
     * @param project 项目信息
     * @return 返回一个0-1的整数
     */
    @Override
    public Integer insertProject(Project project) {
        return projectMapper.insert(project);
    }

    /**
     * 查询项目信息
     * @param pName 项目名称
     * @param bCode 部门名称
     * @param name 用户名称
     * @param pId 项目id
     * @param pageReq 分页规则
     * @return 返回项目信息集合
     */
    @Override
    public IPage<ProjectList> getProjectList(String pName, String bCode, String name,String pId, PageReq pageReq) {
        Page<ProjectList> page = new Page<>(pageReq.getCurrent(), pageReq.getSize());
        return projectMapper.getProjectList(pName,bCode,name,pId,page);
    }

    /**
     * 查询单个项目信息
     * @param pId 项目id
     * @return 返回项目信息
     */
    @Override
    public ProjectUpdate obtainProjectInformation(String pId) {
        return projectMapper.obtainProjectInformation(pId);
    }

    /**
     * 修改项目信息
     * @param project 项目信息
     * @return 返回一个0-1的整数
     */
    @Override
    public Integer updateProject(Project project) {
        return projectMapper.updateById(project);
    }

    /**
     * 修改项目状态
     * @param pId 项目id
     * @param state 项目状态
     */
    @Override
    public void updateProjectAll(String pId,Integer state) {
        projectMapper.updateProjectAll(pId,state);
    }

    /**
     * 批量删除项目信息
     * @param pIdList 项目id集合
     * @return 返回一个0-1的整数
     */
    @Override
    public Integer deleteProject(List<String> pIdList) {
        return projectMapper.deleteByIds(pIdList);
    }

    /**
     * 查询我管理的项目
     * @param name 用户姓名
     * @param pId 项目id
     * @param userId 用户id
     * @param pageReq 分页规则
     * @return 返回项目信息集合
     */
    @Override
    public IPage<ProjectList> getMyProjects(String name,String pId, String userId, PageReq pageReq) {
        Page<ProjectList> listPage = new Page<>(pageReq.getCurrent(), pageReq.getSize());
        return projectMapper.getMyProjects(name,pId,userId,listPage);
    }

    /**
     * 删除单个项目信息
     * @param pId 项目id
     * @return 返回一个0-1的整数
     */
    @Override
    public Integer deleteProjectSingle(String pId) {
        return projectMapper.deleteById(pId);
    }

    /**
     * 查询该用户所管理的所有项目
     * @param userId 用户id
     * @return 返回项目信息集合
     */
    @Override
    public List<ProjectList> getAutProjectList(String userId) {
        return projectMapper.getAutProjectList(userId);
    }

    /**
     * 根据用户id查询授权用户的项目
     * @param userId 用户id
     * @return 返回一个项目信息的集合
     */
    @Override
    public IPage<ProjectList> authorizeProject(String userId,String pName,String pId, PageReq pageReq) {
        Page<ProjectList> listPage = new Page<>(pageReq.getCurrent(), pageReq.getSize());
        return projectMapper.authorizeProject(userId,pName,pId,listPage);
    }

    /**
     * 通过项目id与用户id查询项目信息
     * @param pId 项目id
     * @param userId 用户id
     * @return 返回项目信息
     */
    @Override
    public Project searchResponsiblePerson(String pId, String userId) {
        QueryWrapper<Project> wrapper = new QueryWrapper<>();
        wrapper.eq("p_id",pId);
        wrapper.eq("userId",userId);
        return projectMapper.selectOne(wrapper);
    }
}
